package lab04.Test04;

public class Count {
    public Thread t;
    private String threadName;
    boolean suspended = false;//对线程进行暂停

    public Count(String threadName){
      this.threadName = threadName;
    }
    public void run(){
       for (int i = 5;i > 0;i--){
           System.out.println("Thread:"+threadName +" "+i);

           //让线程暂停一会
           /*synchronized 关键字，代表这个方法加锁,相当于不管哪一个线程（例如线程A），
           运行到这个方法时,都要检查有没有其它线程B（或者C、 D等）正在用这个方法(或者该类的其他同步方法)
           ，有的话要等正在使用synchronized方法的线程B（或者C 、D）运行完这个方法后再运行此线程A,
           没有的话,锁定调用者,然后直接运行。
           它包括两种用法：synchronized 方法和 synchronized 块。*/
           try {
               Thread.sleep(300);
               synchronized (this){
                   while (suspended){
                       wait();
                   }
               }
           } catch (InterruptedException e) {
               System.out.println("Thread" + threadName +"暂停");
               e.printStackTrace();
           }
           System.out.println("Thread" + threadName +"存在");
       }

    }
    //开始
    public void start(){
        System.out.println("开始"+ threadName);
        if (t==null){
            t=new Thread((Runnable) this,threadName);
            t.start();
        }
    }
    //暂停
    void suspend(){
        suspended = true;
    }
    //继续
    synchronized  void resume(){
        suspended = false;
        notify();
    }
}
